﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using com.creditos.config;
using com.creditos.be.liclSolcred;
using com.creditos.be.liclVerifica;
using System.ServiceModel;
using com.creditos.bl.interfaces.liclSolcred;
using com.creditos.be.liclUtil;
using com.creditos.bl.interfaces.liclUtil;
using com.creditos.be.liclBases;
using com.creditos.bl.interfaces.liclBases;
using com.creditos.be.liclBases;

namespace liclSolcred
{
    public class liclSolcredController
    {
        Config config = new Config();
        public liclSolcredController()
        {

        }
        public List<ProductoBE> ListarProductos(ProductoBE oProductoBE)
        {
            ChannelFactory<IProductoBL> factory = null;
            using (factory = new ChannelFactory<IProductoBL>(config.Context + "Producto"))
            {
                IProductoBL oParm = factory.CreateChannel();
                List<ProductoBE> lst = oParm.ListarProductos(oProductoBE);
                factory.Close();
                return lst;
            }
        }

        public List<SubProductoBE> ListarSubProductos(ProductoBE oProductoBE)
        {
            ChannelFactory<IProductoBL> factory = null;
            using (factory = new ChannelFactory<IProductoBL>(config.Context + "Producto"))
            {
                IProductoBL oParm = factory.CreateChannel();
                List<SubProductoBE> lst = oParm.ListarSubProductos(oProductoBE);
                factory.Close();
                return lst;
            }
        }

        public List<ParametroBE> ListarParametros(ParametroBE oParametroBE)
        {
            ChannelFactory<IParametroBL> factory = null;
            using (factory = new ChannelFactory<IParametroBL>(config.Context + "Parametro"))
            {
                IParametroBL oParm = factory.CreateChannel();
                List<ParametroBE> lst = oParm.Listar(oParametroBE);
                factory.Close();
                return lst;
            }
        }

        public double GuardarSolicitud(SolicitudBE oSolicitudBE)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                double nroSolicitud = oParm.GuardarSolicitud(oSolicitudBE);
                factory.Close();
                return nroSolicitud;
            }
        }

        public SolicitudBE BuscarSolicitudxNumero(SolicitudBE oSolicitud)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                SolicitudBE oSolicitudEncontrada = oParm.BuscarSolicitudxNumero(oSolicitud);
                factory.Close();
                return oSolicitudEncontrada;
            }
        }

        public int SolicitudesRegistradas(ClienteBE oCliente)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                int numeroSolicitudesEncontradas = oParm.NumeroSolicitudesRegistradas(oCliente);
                factory.Close();
                return numeroSolicitudesEncontradas;
            }
        }

        public List<ParametroBE> ListarTipoEvaluacion(ParametroBE oParametro)
        {
            ChannelFactory<IProductoBL> factory = null;
            using (factory = new ChannelFactory<IProductoBL>(config.Context + "Producto"))
            {
                IProductoBL oParm = factory.CreateChannel();
                List<ParametroBE> lst = oParm.ListarTipoEvaluacion(oParametro);
                factory.Close();
                return lst;
            }
        }

        public List<CampanaBE> ListarCampana(ParametroBE oParametro)
        {
            ChannelFactory<IProductoBL> factory = null;
            using (factory = new ChannelFactory<IProductoBL>(config.Context + "Producto"))
            {
                IProductoBL oParm = factory.CreateChannel();
                List<CampanaBE> lst = oParm.ListarCampana(oParametro);
                factory.Close();
                return lst;
            }
        }

        public List<CanalVentaBE> ListarCanalVenta(CanalVentaBE oParametro)
        {
            ChannelFactory<IProductoBL> factory = null;
            using (factory = new ChannelFactory<IProductoBL>(config.Context + "Producto"))
            {
                IProductoBL oParm = factory.CreateChannel();
                List<CanalVentaBE> lst = oParm.ListarCanalVenta(oParametro);
                factory.Close();
                return lst;
            }
        }

        public List<CiiuBE> ListarCiiuGrupo(CiiuBE oParametro)
        {
            ChannelFactory<IProductoBL> factory = null;
            using (factory = new ChannelFactory<IProductoBL>(config.Context + "Producto"))
            {
                IProductoBL oParm = factory.CreateChannel();
                List<CiiuBE> lst = oParm.ListarCiiuGrupo(oParametro);
                factory.Close();
                return lst;
            }
        }

        public List<AgenciaBE> ListarAgencia()
        {
            ChannelFactory<IProductoBL> factory = null;
            using (factory = new ChannelFactory<IProductoBL>(config.Context + "Producto"))
            {
                IProductoBL oParm = factory.CreateChannel();
                List<AgenciaBE> lst = oParm.ListarAgencia();
                factory.Close();
                return lst;
            }
        }

        public List<RepresentanteBE> ListarReprsentante(RepresentanteBE oRepresentante)
        {
            ChannelFactory<IProductoBL> factory = null;
            using (factory = new ChannelFactory<IProductoBL>(config.Context + "Producto"))
            {
                IProductoBL oParm = factory.CreateChannel();
                List<RepresentanteBE> lst = oParm.ListarRepresentante(oRepresentante);
                factory.Close();
                return lst;
            }
        }

        public List<UbigeoBE> ListarUbigeo(UbigeoBE oUbigeo)
        {
            ChannelFactory<IProductoBL> factory = null;
            using (factory = new ChannelFactory<IProductoBL>(config.Context + "Producto"))
            {
                IProductoBL oParm = factory.CreateChannel();
                List<UbigeoBE> lst = oParm.ListarUbigeo(oUbigeo);
                factory.Close();
                return lst;
            }
        }

        public List<ClienteBE> BuscarCliente(ClienteBE oCliente)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<ClienteBE> lst = oParm.BuscarCliente(oCliente);
                factory.Close();
                return lst;
            }
        }

        internal Tasa CalcularTasa(SolicitudBE oSolicitud)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                Tasa oTasaCalculada = oParm.CalcularTasa(oSolicitud);
                factory.Close();
                return oTasaCalculada;
            }
        }

        public List<ProspectoBE> ActualizarProspecto(ProspectoBE oProspecto)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<ProspectoBE> lst = oParm.ActualizarProspecto(oProspecto);
                factory.Close();
                return lst;
                
            }
        }

        public List<ParametrosBasicosBE> ListarVariables()
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<ParametrosBasicosBE> lst = oParm.ListarVariables();
                factory.Close();
                return lst;
            }
        }

        public List<ParametrosBasicosBE> ActualizarParametroBasico(ParametrosBasicosBE oParametrosBasicos)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {                

                ISolicitudBL oParm = factory.CreateChannel();
                List<ParametrosBasicosBE> lst = oParm.ActualizarParametroBasico(oParametrosBasicos);
                factory.Close();
                return lst;

            }
        }

        public void ActualizarParametroBasicoVariable(List<ParametrosBasicosBE> lstParametrosBasicos)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                oParm.ActualizarParametroBasicoVariable(lstParametrosBasicos);
                factory.Close();

            }
        }

        public List<ParametrosBasicosBE> ListarResumenParametrosBasicos()
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<ParametrosBasicosBE> lst = oParm.ListarResumenParametrosBasicos();
                factory.Close();
                return lst;
            }
        }

        public List<EstrategiasCreditoBE> ListarEstrategiasCredito(EstrategiasCreditoBE oEstrategia)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<EstrategiasCreditoBE> lst = oParm.ListarEstrategiasCredito(oEstrategia);
                factory.Close();
                return lst;
            }
        }

        public List<EstrategiasCreditoBE> CargarListaPlantillaPorTipo(int tipoPlantilla)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<EstrategiasCreditoBE> lst = oParm.CargarListaPlantillaPorTipo(tipoPlantilla);
                factory.Close();
                return lst;
            }
        }

        public List<EstrategiasCreditoBE> ActualizarEstrategia(EstrategiasCreditoBE oEstrategia)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<EstrategiasCreditoBE> lst = oParm.ActualizarEstrategia(oEstrategia);
                factory.Close();
                return lst;
            }
        }

        public List<CentralRiesgoBE> ObtenerListaPoliticaCredito(CentralRiesgoBE oCentral)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<CentralRiesgoBE> lst = oParm.ObtenerListaPoliticaCredito(oCentral);
                factory.Close();
                return lst;
            }
        }

        public List<BandejaVerificacionBE> ObtenerListaTipoVerificacion()
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<BandejaVerificacionBE> lst = oParm.ObtenerListaTipoVerificacion();
                factory.Close();
                return lst;
            }
        }

        public List<BandejaVerificacionBE> ObtenerListaVerificacionPendiente(BandejaVerificacionBE oVerificacion)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<BandejaVerificacionBE> lst = oParm.ObtenerListaVerificacionPendiente(oVerificacion);
                factory.Close();
                return lst;
            }
        }

        public List<BandejaVerificacionBE> ActualizarVerificacionDomicilioFisica(BandejaVerificacionBE oVerificacion)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<BandejaVerificacionBE> lst = oParm.ActualizarVerificacionDomicilioFisica(oVerificacion);
                factory.Close();
                return lst;                
            }
        }

        public List<BandejaVerificacionBE> ActualizarVerificacionTrabajoFisica(BandejaVerificacionBE oVerificacion)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<BandejaVerificacionBE> lst = oParm.ActualizarVerificacionTrabajoFisica(oVerificacion);
                factory.Close();
                return lst;
            }
        }

        public List<BandejaVerificacionBE> ObtenerDatosIntegranteVerificacion(BandejaVerificacionBE oVerificacion)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<BandejaVerificacionBE> lst = oParm.ObtenerDatosIntegranteVerificacion(oVerificacion);
                factory.Close();
                return lst;
            }
        }

        public List<ApruebaBE> ObtenerListaSolicitudesXAprobar(ApruebaBE oAprueba)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<ApruebaBE> lst = oParm.ObtenerListaSolicitudesXAprobar(oAprueba);
                factory.Close();
                return lst;
            }
        }

        public List<ApruebaBE> ObtenerListaResultadoReglas(ApruebaBE oAprueba)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<ApruebaBE> lst = oParm.ObtenerListaResultadoReglas(oAprueba);
                factory.Close();
                return lst;
            }
        }

        public void AprobarSolicitudCredito(ApruebaBE oAprueba)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                oParm.AprobarSolicitudCredito(oAprueba);
                factory.Close();                
            }
        }

        public List<EstrategiasCreditoBE> ObtenerEstrategia(EstrategiasCreditoBE oEstrategia)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {
                ISolicitudBL oParm = factory.CreateChannel();
                List<EstrategiasCreditoBE> lst = oParm.ObtenerEstrategia(oEstrategia);
                factory.Close();
                return lst;
            }
        }

        public List<ParametrosBasicosBE> ObtenerParametroBasico(ParametrosBasicosBE oParametrosBasicos)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {

                ISolicitudBL oParm = factory.CreateChannel();
                List<ParametrosBasicosBE> lst = oParm.ObtenerParametroBasico(oParametrosBasicos);
                factory.Close();
                return lst;

            }
        }

        public List<ParametrosBasicosBE> ObtenerParametroBasicoVariable(ParametrosBasicosBE oParametrosBasicos)
        {
            ChannelFactory<ISolicitudBL> factory = null;
            using (factory = new ChannelFactory<ISolicitudBL>(config.Context + "Solicitud"))
            {

                ISolicitudBL oParm = factory.CreateChannel();
                List<ParametrosBasicosBE> lst = oParm.ObtenerParametroBasicoVariable(oParametrosBasicos);
                factory.Close();
                return lst;

            }
        }
    }
}
